package com.dingqb.ktdemo.oop

class Test : TestInterFace {
    override fun test() {
        println("Text: TestInterFace interface !!");
    }

    var v = "成员属性"

    fun setInterFace(test: TestInterFace) {
        test.test()
    }

    fun aa(test: TestInterFace) {
        test.test();

    }

    var basei: Int = 0
        get() {
            println(field);
            return field;
        }
        set(value) {
            if (value > 100) field = 100
            if (value < 0) field = 0;
            println(field);
        };


}

/**
扩展函数
如果扩展函数与类的成员函数名称一致的时候，优先使用类的成员函数

 */
fun Test.Printer1(a: Int): Double {
    return Math.PI * a * a;

}

/**
扩展函数
 */
fun Test.aa(test: TestInterFace) {
    test.test();

}

/**
 * 定义接口
 */
interface TestInterFace {
    fun test()
}

fun main(args: Array<String>) {
    var test = Test()

    /**
     * 采用对象表达式来创建接口对象，即匿名内部类的实例。
     */
    test.setInterFace(object : TestInterFace {
        override fun test() {
            println("对象表达式创建匿名内部类的实例")
        }
    });
    test.aa(object : TestInterFace {
        override fun test() {
            println("aa-对象表达式创建匿名内部类的实例")
        }
    });
    test.test();
    test.basei = -1021;
    println(test.basei);
    println(test.Printer1(2));

}